#ifdef CONFIG_VMX
-struct vmx_mmio_handler vmx_mmio_handers[VMX_MMIO_HANDLER_NR] =
+extern struct vmx_mmio_handler vlapic_mmio_handler;
+
+#define VMX_MMIO_HANDLER_NR 1
+
+struct vmx_mmio_handler *vmx_mmio_handlers[VMX_MMIO_HANDLER_NR] =
{
- {
- .check_handler = vlapic_range,
- .read_handler = vlapic_read,
- .write_handler = vlapic_write
- }
+ &vlapic_mmio_handler
};
static inline void vmx_mmio_access(struct vcpu *v,
{
struct vcpu *v = current;
int i;
- struct vmx_mmio_handler *handler = vmx_mmio_handers;
/* XXX currently only APIC use intercept */
if ( !vmx_apic_support(v->domain) )
return 0;
for ( i = 0; i < VMX_MMIO_HANDLER_NR; i++ ) {
- if ( handler[i].check_handler(v, p->addr) ) {
+ if ( vmx_mmio_handlers[i]->check_handler(v, p->addr) ) {
vmx_mmio_access(v, p,
- handler[i].read_handler, handler[i].write_handler);
+ vmx_mmio_handlers[i]->read_handler,
+ vmx_mmio_handlers[i]->write_handler);
return 1;
}
}
}
}
-unsigned long vlapic_read(struct vcpu *v, unsigned long address,
- unsigned long len)
+static unsigned long vlapic_read(struct vcpu *v, unsigned long address,
+ unsigned long len)
{
unsigned int alignment;
unsigned int tmp;
return result;
}
-unsigned long vlapic_write(struct vcpu *v, unsigned long address,
- unsigned long len, unsigned long val)
+static void vlapic_write(struct vcpu *v, unsigned long address,
+ unsigned long len, unsigned long val)
{
struct vlapic *vlapic = VLAPIC(v);
unsigned int offset = address - vlapic->base_address;
printk("Local APIC Write to read-only register\n");
break;
}
- return 1;
}
-int vlapic_range(struct vcpu *v, unsigned long addr)
+static int vlapic_range(struct vcpu *v, unsigned long addr)
{
struct vlapic *vlapic = VLAPIC(v);
return 0;
}
+struct vmx_mmio_handler vlapic_mmio_handler = {
+ .check_handler = vlapic_range,
+ .read_handler = vlapic_read,
+ .write_handler = vlapic_write
+};
+
void vlapic_msr_set(struct vlapic *vlapic, uint64_t value)
{
/* When apic disabled */
unsigned long addr,
unsigned long length);
-typedef unsigned long (*vmx_mmio_write_t)(struct vcpu *v,
- unsigned long addr,
- unsigned long length,
- unsigned long val);
+typedef void (*vmx_mmio_write_t)(struct vcpu *v,
+ unsigned long addr,
+ unsigned long length,
+ unsigned long val);
typedef int (*vmx_mmio_check_t)(struct vcpu *v, unsigned long addr);
vmx_mmio_write_t write_handler;
};
-#define VMX_MMIO_HANDLER_NR 1
-
-extern struct vmx_mmio_handler vmx_mmio_handers[VMX_MMIO_HANDLER_NR];
-
/* global io interception point in HV */
extern int vmx_io_intercept(ioreq_t *p, int type);
extern int register_io_handler(unsigned long addr, unsigned long size,
extern void vlapic_msr_set(struct vlapic *vlapic, uint64_t value);
-int vlapic_range(struct vcpu *v, unsigned long addr);
-
-unsigned long vlapic_write(struct vcpu *v, unsigned long address,
- unsigned long len, unsigned long val);
-
-unsigned long vlapic_read(struct vcpu *v, unsigned long address,
- unsigned long len);
-
int vlapic_accept_pic_intr(struct vcpu *v);
struct vlapic* apic_round_robin(struct domain *d,